package club.kingyin.kyblog.core.utils.kyutil;

/**
 * @author : kingyins
 * @version : 1.0
 * @program : Ky-Blog
 * @description : 在此处添加类描述
 * @create : 2021年08月19日 15:59
 **/
import java.sql.Date;
import java.text.SimpleDateFormat;


/**
 * 创建时间：2020-10-15<br/>
 * 该类封装了sql.date的操作<br/>
 * @author kingyin
 * @version 1.0
 */
public class DateUtil extends DateTimeUtil {
    private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * 获取当前日期
     * @return 当前日期
     */
    public static Date current() {
        return new Date(System.currentTimeMillis());
    }

    /**
     * 获取自定义日期
     * @param date 自定义日期格式（yyyy-MM-dd）
     * @return 自定义日期
     */
    public static Date custom(String date) {
        long time = datetimeToStamp(date + " 00:00:00");
        return new Date(time);
    }

    /**
     * 日期转时间戳
     * @param date 日期 格式（yyyy-MM-dd）
     * @return 时间戳
     */
    public static long toStamp(Date date) {
        String temp = date.toString();
        return datetimeToStamp(temp + " 00:00:00");
    }

    /**
     * 判断目标日期是否在两个日期之间(包含起始和结束日期)<br/>
     * 比如DateUtil.onDates(DateUtil.custom("2099-10-26"),DateUtil.custom("2020-12-26"),DateUtil.custom("2020-10-26"))</br>
     * 返回28793
     * @param target 目标日期
     * @param start 起始日期
     * @param end 结束日期
     * @return 若在该时期内返回 0 在之前返回距离起始日期天数小于0 在之后返回距离结束日期天数大于0
     */
    public static long onDates(Date target, Date start, Date end){
        if (target == null || start == null || end == null)
            throw new RuntimeException("Incomplete date");
        if (DateUtil.toStamp(start) >= DateUtil.toStamp(end)) {
            Date temp = start;
            start = end;
            end = temp;
        }
        if (DateUtil.toStamp(start)>DateUtil.toStamp(target))
            return (DateUtil.toStamp(target)-DateUtil.toStamp(start))/86400000;
        if (DateUtil.toStamp(target)>DateUtil.toStamp(end))
            return (DateUtil.toStamp(target)-DateUtil.toStamp(end))/86400000;
        return 0;
    }


    /**
     * 返回两日期之间相差的天数
     * @param start 起始日期
     * @param end 结束日期
     * @return 两日期相差的天数
     */
    public static Double differ(Date start,Date end) {
        if (start == null || end == null)
            throw new RuntimeException("Incomplete date");
        return DoubleUtil.toDouble(Math.abs(DateUtil.toStamp(start) - DateUtil.toStamp(end))/86400000.0);
    }

}
